home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue59 / Clinic / BLObRdU.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2000-05-26  |  2.6 KB  |  117 lines

  1. unit BLObRdU;
  2.  
  3. interface
  4.  
  5. uses
  6.   Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   Buttons, StdCtrls, Db, DBTables;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     tblBioLife: TTable;
  12.     fldCommonName: TStringField;
  13.     fldNotes: TMemoField;
  14.     edtCommonName: TEdit;
  15.     memNotes: TMemo;
  16.     Label1: TLabel;
  17.     Label2: TLabel;
  18.     btnPrior: TSpeedButton;
  19.     btnNext: TSpeedButton;
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure btnPriorClick(Sender: TObject);
  22.     procedure btnNextClick(Sender: TObject);
  23.     procedure FieldChange(Sender: TObject);
  24.   private
  25.     FieldChanged: Boolean;
  26.   public
  27.     procedure UpdateTableFromUI;
  28.     procedure UpdateUIFromTable;
  29.     procedure MoveRecord(MoveBy: Integer);
  30.   end;
  31.  
  32. var
  33.   Form1: TForm1;
  34.  
  35. implementation
  36.  
  37. {$R *.DFM}
  38.  
  39. procedure TForm1.UpdateTableFromUI;
  40. var
  41.   Stream: TStream;
  42. begin
  43.   try
  44.     tblBioLife.Edit;
  45.     { Save edit control into string field }
  46.     fldCommonName.AsString := edtCommonName.Text;
  47.     Stream := TBlobStream.Create(fldNotes, bmWrite);
  48.     try
  49.     { Save memo control into BLOb field }
  50.       memNotes.Lines.SaveToStream(Stream)
  51.     finally
  52.       Stream.Free
  53.     end;
  54.     tblBioLife.Post
  55.   except
  56.     tblBioLife.Cancel
  57.   end
  58. end;
  59.  
  60. procedure TForm1.UpdateUIFromTable;
  61. var
  62.   Stream: TStream;
  63. begin
  64.   { Disable buttons as appropriate }
  65.   btnPrior.Enabled := not tblBioLife.Bof;
  66.   btnNext.Enabled := not tblBioLife.Eof;
  67.   { Load edit control from string field }
  68.   edtCommonName.Text := fldCommonName.AsString;
  69.   Stream := TBlobStream.Create(fldNotes, bmRead);
  70.   try
  71.     { Load BLOb field into memo control }
  72.     memNotes.Lines.LoadFromStream(Stream);
  73.   finally
  74.     Stream.Free
  75.   end;
  76.   { Reset change detector }
  77.   FieldChanged := False
  78. end;
  79.  
  80. procedure TForm1.MoveRecord(MoveBy: Integer);
  81. begin
  82.   { If change made, ask if it should be saved }
  83.   if FieldChanged and
  84.      (MessageDlg('Record has changed. Update table?', mtConfirmation,
  85.         [mbYes, mbNo], 0) = mrYes) then
  86.     UpdateTableFromUI;
  87.   { Go to requested record }
  88.   tblBioLife.MoveBy(MoveBy);
  89.   { Refresh UI }
  90.   UpdateUIFromTable
  91. end;
  92.  
  93. procedure TForm1.FormCreate(Sender: TObject);
  94. begin
  95.   tblBioLife.Open;
  96.   UpdateUIFromTable
  97. end;
  98.  
  99. procedure TForm1.btnPriorClick(Sender: TObject);
  100. begin
  101.   MoveRecord(-1)
  102. end;
  103.  
  104. procedure TForm1.btnNextClick(Sender: TObject);
  105. begin
  106.   MoveRecord(1)
  107. end;
  108.  
  109. { Event handler shared by edit's and memo's OnChange events }
  110. procedure TForm1.FieldChange(Sender: TObject);
  111. begin
  112.   { When edit/memo is changed, set change detector }
  113.   FieldChanged := True
  114. end;
  115.  
  116. end.
  117.